package com.cskaoyan.javase.object._7wrapper._3notice;

import java.util.SplittableRandom;

/**
 * 包装类始终是一个类，它是一个引用数据类型，始终是不同于基本数据类型的，所以要注意以下：
 *      1.使用包装类要注意空指针异常，而基本数据类型没有这个烦恼。
 *      2.包装类对象在比较对象相等时，不能再像基本数据类型一样用"=="比较了！而是要使用"equals"方法。
 * 在以上注意事项中，尤其注意不能使用"=="比较大小，这里我们做一下原理的讲解。
 *
 * 包装类型在比较对象相等时，要分三种情况：
 * 1. 整型包装类型对象之间的比较
 *      所有整型的包装类型对象,如果它的取值在[-128,127]之间,那么它们就会共享缓冲中的一个对象
 *          这时用"=="比较,返回true
 *      如果取值不在[-128,127]之间,那么就不是共享缓存了,而是直接创建新对象
 *          这样用"=="比较,返回false
 *
 *      总之,不能使用"=="比较,要使用equals
 *
 *      不同的整型包装类型对象，一个byte的取值范围的对象缓存生成时机是不同的：
 *          1.Integer对象是在JVM启动时就把对象放入缓存。
 *          2.其余整型对象是在具体使用时把对象放入缓存。
 *
 * 2. 浮点型包装类型对象之间的比较
 * 3. Boolean对象之间的比较
 *
 * @since 10:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // Integer i = null;
        // i.intValue();
        /*
            包装类型得到对象,普遍有两种方式:
                1.自动装箱,依赖于调用类中的valueOf方法
                2.构造器创建对象(一定是一个新的对象)
         */
        Integer a = 120;
        Integer b = 120;
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println("---------------");
        Integer c = 200;
        Integer d = 200;
        System.out.println(c == d);
        System.out.println(c.equals(d));

        Double num = 0.1;
        Double num2 = 0.1;
        System.out.println(num == num2);
        System.out.println(num.equals(num2));


        Boolean b1 = true;
        Boolean b2 = true;

        System.out.println(b1 == b2);

    }

    public void test() {
        int a, b, c, d;
        int[] e, f, g[];
    }
}
